graphviz 简介
视频锁定
{$ currentTime | date:'mm:ss' $}
{$ timeLeft | date:'mm:ss' $}
本文介绍一个高效而简洁的绘图工具 graphviz。graphviz 是贝尔实验室开发的一个开源的工具包,它使用一个特定的 DSL(领域特定语言):dot 作为脚本语言,然后使用布局引擎来 解析此脚本,并完成自动布局。graphviz 提供丰富的导出格式,如常用的图片格式,SVG, PDF 格式等。
graphviz 中包含了众多的布局器:
- dot 默认布局方式,主要用于有向图
- neato 基于 spring-model(又称 force-based)算法
- twopi 径向布局
- circo 圆环布局
- fdp 用于无向图
graphviz 的设计初衷是对有向图/无向图等进行自动布局,开发人员使用 dot 脚本定义图形元素,然后选择算法进行布局,最终导出结果。
首先,在 dot 脚本中定义图的顶点和边,顶点和边都具有各自的属性,比如形状,颜色,填充模式,字体,样式等。然后使用合适的布局算法进行布局。布局算法除了绘制各个顶点 和边之外,需要尽可能的将顶点均匀的分布在画布上,并且尽可能的减少边的交叉(如果交叉过多,就很难看清楚顶点之间的关系了)。所以使用 graphviz 的一般流程为:
- 定义一个图,并向图中添加需要的顶点和边
- 为顶点和边添加样式
- 使用布局引擎进行绘制
一旦熟悉这种开发模式,就可以快速的将你的想法绘制出来。配合一个良好的编辑器 (vim/emacs)等,可以极大的提高开发效率,与常见的 GUI 应用的所见即所得模式对应, 此模式称为所思即所得。比如在我的机器上,使用 vim 编辑 dot 脚本,然后将 F8 映射为调用 dot 引擎去绘制当前脚本,并打开一个新的窗口来显示运行结果:
对于开发人员而言,经常会用到的图形绘制可能包括:函数调用关系,一个复杂的数据结构,系统的模块组成,抽象语法树等。
在线练习
{$ activeFileHint $}